package main.leetcode.offer.firstround.from03to50;

import java.util.ArrayList;
import java.util.List;

/**
 * 45.把数组排成最小的数
 *
 * <p>输入一个正整数数组，把数组里所有数字拼接起来排成一个数，打印能拼接出的所有数字中最小的一个。
 *
 * <p>示例 1:输入: [10,2] 输出: "102"
 *
 * <p>示例 2:输入: [3,30,34,5,9] 输出: "3033459"
 *
 * <p>提示:0 < nums.length <= 100
 *
 * <p>说明:输出结果可能非常大，所以你需要返回一个字符串而不是整数 拼接起来的数字可能会有前导 0，最后结果不需要去掉前导 0
 */
public class ex45 {
    public String minNumber(int[] nums) {
        List<String> list = new ArrayList<>();
        for (int i : nums) list.add(String.valueOf(i));

        // 重写sort的compare方法
        // compare(s1, s2) => s1 + s2 < s2 + s1 => swap(s1,s2)

        //	    list.sort(new Comparator<String>() {
        //		    @Override
        //		    public int compare(String o1, String o2) {
        //			    return (o1 + o2).compareTo(o2 + o1);
        //		    }
        //	    });

        /* lambda 写法 */
        list.sort((s1, s2) -> (s1 + s2).compareTo(s2 + s1));
        StringBuilder res = new StringBuilder();
        for (String str : list) res.append(str);

        return res.toString();
    }
}
